﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Maestro
{
    public partial class CasoProblema : Form
    {
        public CasoProblema()
        {
            InitializeComponent();
        }

        private void CasoProblema_Load(object sender, EventArgs e)
        {
            ListarCasoProblema();
        }

        private void ListarCasoProblema()
        {
            LogicaNegocio.CasoProblemaBLL casoProblemaBLL = new LogicaNegocio.CasoProblemaBLL();
            gridInfoRegistrada.DataSource = casoProblemaBLL.Listar();            
            gridInfoRegistrada.ClearSelection();
            gridInfoRegistrada.CurrentCell = null;
        }

        private void LimpiarFormulario()
        {
            txtCasoProblema.ResetText();
            rbHardware.Checked = false;
            rbSoftware.Checked = false;
        }

        private void gridInfoRegistrada_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridInfoRegistrada.DataSource != null)
            {
                gridInfoRegistrada.Columns["ID"].Visible = false;
                gridInfoRegistrada.Columns["idCaso"].Visible = false;
                gridInfoRegistrada.Columns["descripcion"].HeaderText = "Descripción";
                gridInfoRegistrada.Columns["tipo"].HeaderText = "Tipo de problema";
                gridInfoRegistrada.Columns["eliminado"].Visible = false;
                gridInfoRegistrada.Columns["PROBLEMA"].Visible = false;
            }
        }

        private void gridInfoRegistrada_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (gridInfoRegistrada.Columns[e.ColumnIndex].Name == "tipo")
            {
                int valor = (int)e.Value;
                e.Value = valor == 1 ? "Software" : valor == 0 ? "Hardware" : string.Empty;
            }
        }

        private void gridInfoRegistrada_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                AccesoDatos.CASOS_PROBL casoProblema = gridInfoRegistrada.Rows[e.RowIndex].DataBoundItem as AccesoDatos.CASOS_PROBL;

                txtCasoProblema.Text = casoProblema.descripcion.Trim();
                rbHardware.Checked = casoProblema.tipo.HasValue ? casoProblema.tipo.Value == 0 ? true : false : false;
                rbSoftware.Checked = casoProblema.tipo.HasValue ? casoProblema.tipo.Value == 1 ? true : false : false;
            }
        }

        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtCasoProblema.Text))
            {
                if (rbHardware.Checked || rbSoftware.Checked)
                {
                    LogicaNegocio.CasoProblemaBLL casoProblemaBLL = new LogicaNegocio.CasoProblemaBLL();
                    List<AccesoDatos.CASOS_PROBL> lista = casoProblemaBLL.Listar();
                    AccesoDatos.CASOS_PROBL tipo = lista.Find(x => x.descripcion.Equals(txtCasoProblema.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && x.eliminado == 0);

                    if(tipo == null)
                    {
                        AccesoDatos.CASOS_PROBL nuevoCasoProblema = new AccesoDatos.CASOS_PROBL()
                        {
                            descripcion = txtCasoProblema.Text.Trim(),
                            tipo = rbHardware.Checked ? 0 : rbSoftware.Checked ? 1 : new Nullable<int>(),
                            eliminado = 0
                        };

                        casoProblemaBLL.Registrar(nuevoCasoProblema);

                        ListarCasoProblema();
                        LimpiarFormulario();
                    }
                }
                else
                {
                    MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese campo 'Caso'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                if (!string.IsNullOrWhiteSpace(txtCasoProblema.Text))
                {
                    AccesoDatos.CASOS_PROBL selectedCasoProblema = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.CASOS_PROBL;
                    LogicaNegocio.CasoProblemaBLL casoProblemaBLL = new LogicaNegocio.CasoProblemaBLL();

                    if (selectedCasoProblema.descripcion.Equals(txtCasoProblema.Text.Trim(), StringComparison.CurrentCultureIgnoreCase))
                    {
                        AccesoDatos.CASOS_PROBL updCasoProblema = new AccesoDatos.CASOS_PROBL()
                        {
                            descripcion = txtCasoProblema.Text.Trim(),
                            tipo = rbHardware.Checked ? 0 : rbSoftware.Checked ? 1 : new Nullable<int>()
                        };

                        casoProblemaBLL.Actualizar(selectedCasoProblema, updCasoProblema);
                        ListarCasoProblema();
                        LimpiarFormulario();
                    }
                    else
                    {
                        List<AccesoDatos.CASOS_PROBL> lista = casoProblemaBLL.Listar();
                        AccesoDatos.CASOS_PROBL tipo = lista.Find(x => x.descripcion.Equals(txtCasoProblema.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && x.eliminado == 0);

                        if (tipo == null)
                        {
                            AccesoDatos.CASOS_PROBL updCasoProblema = new AccesoDatos.CASOS_PROBL()
                            {
                                descripcion = txtCasoProblema.Text.Trim(),
                                tipo = rbHardware.Checked ? 0 : rbSoftware.Checked ? 1 : new Nullable<int>()
                            };

                            casoProblemaBLL.Actualizar(selectedCasoProblema, updCasoProblema);
                            ListarCasoProblema();
                            LimpiarFormulario();
                        }
                        else
                        {
                            MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese campo 'Caso'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                DialogResult dr = MessageBox.Show("¿Confirma eliminar la fila seleccionada?", "Sisco", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                if (dr == DialogResult.Yes)
                {
                    AccesoDatos.CASOS_PROBL selectedCasoProblema = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.CASOS_PROBL;
                    LogicaNegocio.CasoProblemaBLL casoProblemaBLL = new LogicaNegocio.CasoProblemaBLL();

                    casoProblemaBLL.Eliminar(selectedCasoProblema);
                    ListarCasoProblema();
                    LimpiarFormulario();
                }
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
